// 冒泡排序10个数字
#include <stdio.h>
#define INT_ARRAY_LEN 10
int main(void)
{
    //输入：数组a[n]。(n=10)
    int a[INT_ARRAY_LEN] = {0};
    printf("Input 10 numbers:\n");
    int i = 0;
    for (i = 0; i < INT_ARRAY_LEN; i++)
    {
        scanf("%d", &a[i]);
    }
//BEGIN
    //扫描n-1遍，确保最重的数字一定能从最顶部沉底
    //FOR i := 1 to n - 1 DO
    for (i = 1; i <= INT_ARRAY_LEN - 1; i++)
    {
        // 在每一遍中，检查数组中所有的相邻的元素
        // FOR j := 0 to n-2 DO
        int j = 0;
        for (j = 0; j <= INT_ARRAY_LEN - 2; j++)
        {
            //判断数组中相邻元素a[j]和a[j+1]之间是否可以“冒泡”
            //IF a[j] > a[j+1] THEN
            if (a[j] > a[j + 1])
            {
                // 冒泡
                // swap(a[j], a[j+1]);
                int tmp;
                tmp = a[j];
                a[j] = a[j + 1];
                a[j + 1] = tmp; 
            }
            //END IF
        }//END FOR(j)
    }//END FOR(i)
   //输出：升序排序后的数组a[n]。
   printf("Output:\n");
   for(i = 0; i < INT_ARRAY_LEN; i++)
   {
    printf("%d ", a[i]);
   }
   printf("\n");
//END
    return 0;
}
// 假设输入为：9 8 5 4 2 0 1 3 7 6
// 假设输入为：9 8 7 6 5 4 3 2 1 0

/*
打印调试日志：

        printf("debug: After i=%d,\ndebug: ", i);
        int k = 0;
        for (k = 0; k < INT_ARRAY_LEN; k++)
        {
            printf("%d ", a[k]);
        }
        printf("\n");

*/